import { PipeTransform, Injectable, ArgumentMetadata, BadRequestException } from '@nestjs/common';
import * as moment from 'moment';

@Injectable()
export class DatetimeTransformPipe implements PipeTransform {
  transform(value: any, metadata: ArgumentMetadata) {
    // 只处理字符串类型的时间参数
    if (metadata.type === 'query' || metadata.type === 'body') {
      if (typeof value === 'object' && value !== null) {
        // 处理对象中的 datetime 字段
        if (value.datetime && typeof value.datetime === 'string') {
          value.datetime = this.parseDateTime(value.datetime);
        }
      } else if (typeof value === 'string' && metadata.data === 'datetime') {
        // 处理直接的 datetime 参数
        return this.parseDateTime(value);
      }
    }
    
    return value;
  }

  private parseDateTime(datetime: string): Date {
    try {
      // 使用 moment 解析时间，支持多种格式
      const m = moment(datetime.trim(), [
        'YYYY-MM-DD HH:mm:ss',
        'YYYY-MM-DD HH:mm',
        'YYYY-MM-DD',
        'YYYY/MM/DD HH:mm:ss',
        'YYYY/MM/DD HH:mm',
        'YYYY/MM/DD'
      ], true); // 严格模式
      
      if (!m.isValid()) {
        throw new BadRequestException('时间格式错误，请使用 YYYY-MM-DD HH:mm 格式');
      }
      
      // 如果没有时间部分，默认添加 12:00
      if (!m.format('HH:mm:ss').includes(':')) {
        m.hour(12).minute(0).second(0);
      }
      
      // 返回 Date 对象（北京时间）
      return m.toDate();
    } catch (error) {
      if (error instanceof BadRequestException) {
        throw error;
      }
      throw new BadRequestException('时间格式错误，请使用 YYYY-MM-DD HH:mm 格式');
    }
  }
}
